import CryptoJS from 'crypto-js';
import { v4 } from "uuid";
import dateFormat from "date-format";
import { appState } from "@/store/app"
import { FILE_URL } from '@/config';
import moment from "@/utils/moment"

/**
 * 加密更新提交方式
 */
export const CAJ = function (data: any): string {
  let key = v4().split("").sort().slice(0, 32).join("");

  var json = JSON.stringify(data);

  var ciphertext = CryptoJS.AES.encrypt(
    CryptoJS.enc.Utf8.parse(json),
    CryptoJS.enc.Utf8.parse(key), {
    iv: CryptoJS.enc.Utf8.parse(key.slice(0, 16)),
    modes: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.Pkcs7
  }
  );
  let arrData = (ciphertext.toString() + key).split("")
  let paraString = "";
  for (let item of arrData) {
    paraString += "c=" + encodeURIComponent(item) + "&"
  }
  return paraString.slice(0, paraString.length - 1);
}

/**
 * 服务器时间转为指定格式的
 *  格式化
 * dd-天|
 * MM-月|
 * yy-两位年|
 * yyyy-四位年|
 * hh-小时|
 * mm-分钟|
 * ss-秒钟|
 * SSS-毫秒|
*/
export const dateStringToFormat = function (format: string, dateString: string): string {
  if (!dateString) return "";
  return dateFormat(format, dateFormat.parse("yyyy-MM-dd hh:mm:ss.SSS", dateString));
}

/**
 * 获取常见的主表按钮显示
 */
export const getPanelUxBtn = function (menuKey: string) {
  let menuAction = getMenuAction(menuKey);
  let btnUx = ['search']
  menuAction['add'] ? btnUx.push('add') : "";
  menuAction['delete'] ? btnUx.push('delete') : "";
  return btnUx
}

/**
 * 获取当前页面 全部按钮权限
 */
export const getMenuAction = function (menuKey: string) {
  return appState.menuActionMap[menuKey] || [];
}

/**
 * 获取一个服务器的文件的全链接
 * url:服务器唯一编号 / 其他全链接
 */
export function getFileUrl(url: string) {
  if (!url) return "";
  let _url = url;
  if (_url.indexOf("http") < 0) {
    _url = FILE_URL + _url
  }
  return _url;
}

/**
 * 获取一个服务器的文件的唯一编号
 * url:全链接
 */
export function getFileEntity(url: string) {
  return url.split(FILE_URL)[1]
}

/**
 * 服务器时间解析
 * YYYY-MM-DD HH:mm:ss.SSS
 */
export function dataFormat(dateTime: string, format: string) {
  return moment(dateTime, "YYYY-MM-DD HH:mm:ss.SSS").format(format);
}
